<!DOCTYPE html>
<html lang="zh-cn">
<head>
   
    <link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=KOZafwuaDasEedEenI5aTy8aXH0epbm6VUJ0v3vsT_Q1"/>
<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/ThinkInside/bundle-ThinkInside.css?v=RRjf6pEarGnbXZ86qxNycPfQivwSKWRa4heYLB15rVE1"/>
<link type="text/css" rel="stylesheet" href="/blog/customcss/428549.css?v=%2fam3bBTkW5NBWhBE%2fD0lcyJv5UM%3d"/>

</head>
<body>
<a name="top"></a>

<div id="page_begin_html"></div><script>load_page_begin_html();</script>

<div id="topics">
	<div class = "post">
		<h1 class = "postTitle">
			<a id="cb_post_title_url" class="postTitle2" href="https://www.cnblogs.com/frankdeng/p/9310183.html">HBase（一）HBase入门简介</a>
		</h1>
		<div class="clear"></div>
		<div class="postBody">
			<div id="cnblogs_post_body" class="blogpost-body"><h2>一&nbsp;<strong>HBase</strong><strong>&nbsp;</strong>的起源</h2>
<p>HBase&nbsp;的原型是&nbsp;Google&nbsp;的&nbsp;BigTable&nbsp;论文，受到了该论文思想的启发，目前作为&nbsp;Hadoop 的子项目来开发维护，用于支持结构化的数据存储。</p>
<p><a class="externalLink" href="http://www.apache.org/">Apache</a>&nbsp;HBase&trade;是<a class="externalLink" href="http://hadoop.apache.org/">Hadoop</a>数据库，这是一个分布式，可扩展的大数据存储。</p>
<p>当您需要随机，实时读取/写入您的大数据时使用Apache HBase&trade;。该项目的目标是托管非常大的表 - 数十亿行&times;数百万列 - 在商品硬件集群上。Apache HBase是一个开源的，分布式的，版本化的非关系数据库，其模型是由Chang等人在Google的<a class="externalLink" href="http://research.google.com/archive/bigtable.html">Bigtable：一种用于结构化数据</a>的<a class="externalLink" href="http://research.google.com/archive/bigtable.html">分布式存储系统</a>之后建模的。就像Bigtable利用Google文件系统提供的分布式数据存储一样，Apache HBase在Hadoop和HDFS之上提供了类似Bigtable的功能。</p>
<p>官方旧版本下载地址：<a href="http://archive.apache.org/dist/hbase/" target="_blank">http://archive.apache.org/dist/hbase/</a>&nbsp; &nbsp; &nbsp; &nbsp;官方网站：<a href="http://hbase.apache.org/">http://hbase.apache.org</a></p>
<div class="Section1">
<p>-- 2006&nbsp;年&nbsp;Google&nbsp;发表&nbsp;BigTable 白皮书</p>
<p>-- 2006&nbsp;年开始开发&nbsp;HBase</p>
<p>-- 2008&nbsp;年北京成功开奥运会，程序员默默地将&nbsp;HBase&nbsp;弄成了&nbsp;Hadoop 的子项目</p>
<p>-- 2010&nbsp;年&nbsp;HBase&nbsp;成为&nbsp;Apache 顶级项目</p>
<p>-- 现在很多公司二次开发出了很多发行版本，你也开始使用了。</p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; 不一定所有的企业都会使用&nbsp;HBase，大数据的框架可以是相互配合相互依赖的，同时，根据不同的业务，部分框架之间的使用也可以是相互独立的。例如有些企业在处理整个业务时，&nbsp;只是用&nbsp;HDFS+Spark&nbsp;部分的内容。所以在学习&nbsp;HBase 框架时，一定要有宏观思维，了解其框架特性，不一定非要在所有的业务中使用所有的框架，要具体情况具体分析，酌情选择。</p>
<h2 class="16" align="justify">二&nbsp;<strong>HBase</strong>在商业项目中的能力</h2>
<p align="justify">每天：</p>
<p class="16" align="justify">1)&nbsp;消息量：发送和接收的消息数超过&nbsp;60 亿</p>
<p class="16" align="justify">2)&nbsp;将近&nbsp;1000 亿条数据的读写</p>
<p class="16" align="justify">3)&nbsp;高峰期每秒&nbsp;150&nbsp;万左右操作</p>
<p class="16" align="justify">4)&nbsp;整体读取数据占有约&nbsp;55%，写入占有&nbsp;45%</p>
<p class="16" align="justify">5)&nbsp;超过&nbsp;2PB&nbsp;的数据，涉及冗余共&nbsp;6PB&nbsp;数据</p>
<p class="16" align="justify">6)&nbsp;数据每月大概增长&nbsp;300&nbsp;千兆字节。</p>
</div>
<div class="Section2">
<h2 class="16">三&nbsp;<strong>HBase</strong><strong>&nbsp;</strong>的架构</h2>
<p align="justify">HBase&nbsp;一种是作为存储的分布式文件系统，另一种是作为数据处理模型的&nbsp;MR 框架。因为日常开发人员比较熟练的是结构化的数据进行处理，但是在&nbsp;HDFS 直接存储的文件往往不具有结构化，所以催生出了&nbsp;HBase&nbsp;在&nbsp;HDFS 上的操作。如果需要查询数据，只需要通过键值便可以成功访问。</p>
<p align="justify">架构图如下图所示：</p>
</div>
<p><img src="https://images2018.cnblogs.com/blog/1385722/201806/1385722-20180603140708872-1300224475.png" alt="" /></p>
<div class="Section3">
<p>HBase&nbsp;&nbsp;内置有&nbsp;Zookeeper&nbsp;，但一般我们会有其他的&nbsp;Zookeeper&nbsp;&nbsp;集群来监管&nbsp;master&nbsp;&nbsp;和region server，Zookeeper &nbsp;通过选举，保证任何时候，集群中只有一个活跃的&nbsp;HMaster，HMaster与&nbsp;HRegionServer&nbsp;&nbsp;启动时会向&nbsp;ZooKeeper&nbsp;注册，存储所有&nbsp;HRegion&nbsp;的寻址入口，实时监控HRegionserver&nbsp;的上线和下线信息。并实时通知给&nbsp;HMaster，存储&nbsp;HBase&nbsp;的&nbsp;schema&nbsp;和&nbsp;table 元数据，默认情况下，HBase&nbsp;管理&nbsp;ZooKeeper 实例，Zookeeper&nbsp;的引入使得&nbsp;HMaster 不再是单点故障。一般情况下会启动两个&nbsp;HMaster，非&nbsp;Active&nbsp;的&nbsp;HMaster&nbsp;会定期的和&nbsp;Active&nbsp;HMaster通信以获取其最新状态，从而保证它是实时更新的，因而如果启动了多个&nbsp;HMaster 反而增加了&nbsp;Active HMaster 的负担。</p>
<p align="justify">一个&nbsp;RegionServer&nbsp;可以包含多个&nbsp;HRegion，每个&nbsp;RegionServer&nbsp;维护一个&nbsp;HLog，和多个&nbsp;HFiles以及其对应的&nbsp;MemStore。RegionServer&nbsp;运行于&nbsp;DataNode&nbsp;上，数量可以与&nbsp;DatNode&nbsp;数量一致，&nbsp;请参考如下架构图：</p>
</div>
<p><img src="https://images2018.cnblogs.com/blog/1385722/201806/1385722-20180603140727548-1823170683.png" alt="" /></p>
<div class="Section1">
<h2 class="16">四&nbsp;<strong>HBase</strong><strong>&nbsp;</strong>的角色</h2>
<h3>1.&nbsp;<strong>HMaster</strong></h3>
<p>功能：</p>
<p class="16">1)&nbsp;监控&nbsp;RegionServer</p>
<p class="16">2)&nbsp;处理&nbsp;RegionServer&nbsp;故障转移</p>
<p class="16">3)&nbsp;处理元数据的变更</p>
<p class="16">4)&nbsp;处理&nbsp;region&nbsp;的分配或移除</p>
<p class="16">5)&nbsp;在空闲时间进行数据的负载均衡</p>
<p class="16">6)&nbsp;通过&nbsp;Zookeeper&nbsp;发布自己的位置给客户端</p>
<h3>2.&nbsp;<strong>RegionServer</strong></h3>
<p>功能：</p>
<p class="16">1)&nbsp;负责存储&nbsp;HBase&nbsp;的实际数据</p>
<p class="16">2)&nbsp;处理分配给它的&nbsp;Region</p>
<p class="16">3)&nbsp;刷新缓存到&nbsp;HDFS</p>
<p class="16">4)&nbsp;维护&nbsp;HLog</p>
<p class="16">5)&nbsp;执行压缩</p>
</div>
<div class="Section2">
<p class="16">6)&nbsp;负责处理&nbsp;Region&nbsp;分片</p>
<p>组件：</p>
<h4>1)&nbsp;<strong>Write-Ahead</strong><strong>&nbsp;</strong><strong>logs</strong></h4>
<p align="justify">HBase&nbsp;的修改记录，当对&nbsp;HBase 读写数据的时候，数据不是直接写进磁盘，它会在内存中保留一段时间（时间以及数据量阈值可以设定）。但把数据保存在内存中可能有更高的概率引起数据丢失，为了解决这个问题，数据会先写在一个叫做&nbsp;Write-Ahead logfile&nbsp;的文件中，&nbsp;然后再写入内存中。所以在系统出现故障的时候，数据可以通过这个日志文件重建。</p>
<h4 align="justify">2)&nbsp;<strong>HFile</strong></h4>
<p align="justify">这是在磁盘上保存原始数据的实际的物理文件，是实际的存储文件。</p>
<h4 align="justify">3)&nbsp;<strong>Store</strong></h4>
<p align="justify">HFile&nbsp;存储在&nbsp;Store&nbsp;中，一个&nbsp;Store&nbsp;对应&nbsp;HBase 表中的一个列族。</p>
<h4 align="justify">4)&nbsp;<strong>MemStore</strong></h4>
<p align="justify">顾名思义，就是内存存储，位于内存中，用来保存当前的数据操作，所以当数据保存在&nbsp;WAL</p>
<p align="justify">中之后，RegsionServer 会在内存中存储键值对。</p>
<h4 align="justify">5)&nbsp;<strong>Region</strong></h4>
<p>Hbase&nbsp;表的分片，HBase&nbsp;表会根据&nbsp;RowKey&nbsp;值被切分成不同的&nbsp;region&nbsp;存储在&nbsp;RegionServer&nbsp;中，在一个&nbsp;RegionServer&nbsp;中可以有多个不同的&nbsp;region。</p>
<div class="Section71">
<h2>五&nbsp;<strong>HBase2.0</strong><strong>&nbsp;</strong>新特性</h2>
<p align="justify">2017&nbsp;年&nbsp;8&nbsp;月&nbsp;22&nbsp;日凌晨&nbsp;2 点左右，HBase&nbsp;发布了&nbsp;2.0.0&nbsp;alpha-2，相比于上一个版本，修复了</p>
<p>500&nbsp;个补丁，我们来了解一下&nbsp;2.0&nbsp;版本的&nbsp;HBase 新特性。最新文档：</p>
<p align="justify"><a href="http://hbase.apache.org/book.html#ttl">http://hbase.apache.org/book.html#ttl</a></p>
<p>官方发布主页：</p>
<p><a href="http://mail-archives.apache.org/mod_mbox/www-announce/201708.mbox/%3cCADcMMgFzmX0xYYso-UAYbU7V8z-Obk1J4pxzbGkRzbP5Hps%2BiA%40mail.gmail.com">http://mail-archives.apache.org/mod_mbox/www-announce/201708.mbox/&lt;CADcMMgFzmX0x</a></p>
<p><a href="http://mail-archives.apache.org/mod_mbox/www-announce/201708.mbox/%3cCADcMMgFzmX0xYYso-UAYbU7V8z-Obk1J4pxzbGkRzbP5Hps%2BiA%40mail.gmail.com">YYso-UAYbU7V8z-Obk1J4pxzbGkRzbP5Hps+iA@mail.gmail.com</a></p>
<p>举例：</p>
<p class="16">1)&nbsp;<strong>region</strong><strong>&nbsp;</strong>进行了多份冗余</p>
<p align="justify">主&nbsp;region&nbsp;负责读写，从&nbsp;region&nbsp;维护在其他&nbsp;HregionServer&nbsp;中，负责读以及同步主&nbsp;region 中的信息，如果同步不及时，是有可能出现&nbsp;client&nbsp;在从&nbsp;region 中读到了脏数据（主&nbsp;region 还没来得及把&nbsp;memstore&nbsp;中的变动的内容&nbsp;flush）。</p>
</div>
<p class="16">2)&nbsp;更多变动</p>
<p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12340859&amp;styleName&amp;projectId=12310753&amp;Create=Create&amp;atl_token=A5KQ-2QAV-T4JA-FDED%7Ce6f233490acdf4785b697d4b457f7adb0a72b69f%7Clout">https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12340859&amp;styleName=&amp;projectId</a></p>
<p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12340859&amp;styleName&amp;projectId=12310753&amp;Create=Create&amp;atl_token=A5KQ-2QAV-T4JA-FDED%7Ce6f233490acdf4785b697d4b457f7adb0a72b69f%7Clout">=12310753&amp;Create=Create&amp;atl_token=A5KQ-2QAV-T4JA-FDED%7Ce6f233490acdf4785b697</a></p>
<p><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12340859&amp;styleName&amp;projectId=12310753&amp;Create=Create&amp;atl_token=A5KQ-2QAV-T4JA-FDED%7Ce6f233490acdf4785b697d4b457f7adb0a72b69f%7Clout">d4b457f7adb0a72b69f%7Clout</a></p>
</div></div><div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block">
<div id="BlogPostCategory"></div>
<div id="EntryTag"></div>
<div id="blog_post_info">
</div>

</body>
</html>
